package com.sinevil.tcpTrans.entity.task;

import lombok.Getter;

import java.util.concurrent.PriorityBlockingQueue;

/**
 * @Classname TaskQueue
 * @Description 优先任务队列,内部使用阻塞队列实现，在多线程环境下是安全的
 * @Version 1.0.0
 * @Date 2025/1/5 15:10
 * @Created by sinevil
 */
public class TaskQueue {

    @Getter
    protected  PriorityBlockingQueue<Task> taskQueue = new PriorityBlockingQueue<>();

    /**
     * 向任务队列中添加任务
     * @param task
     */
    public void enqueue(Task task) {
        taskQueue.add(task);
    }

    /**
     * 从任务队列中取出任务
     * @return
     */
    public Task dequeue() {
        try {
            return taskQueue.take();
        } catch (InterruptedException e) {
            System.out.println("异常");
            Thread.currentThread().interrupt();
            return null;
        }
    }

    public boolean isEmpty() {
        return taskQueue.isEmpty();
    }

    /**
     * 返回任务队列中任务的数量
     * @return
     */
    public int size(){
        return taskQueue.size();
    }
}